package com.xique.park.bean.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xique.common.core.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 支付记录对象 t_pay_order
 *
 * @author liuxueli
 * @date 2021-12-22
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PayOrder {

    private static final long serialVersionUID = 1L;

    /**
     * 自动增量
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 停车场id
     */
    @Excel(name = "停车场id")
    private Long parkId;

    /**
     * 车牌号
     */
    @Excel(name = "车牌号")
    private String plate;

    /**
     * 订单编号（不用id）：多个用，分开
     */
    @Excel(name = "订单编号", readConverterExp = "不=用id")
    private String orderIds;

    /**
     * 支付记录序列号
     */
    @Excel(name = "支付记录序列号")
    private String paySsn;

    /**
     * 支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date payTime;

    /**
     * 支付类型 0p云8-微信 4-支付宝 1-现金
     */
    @Excel(name = "支付类型 0p云8-微信 4-支付宝 1-现金")
    private String payType;

    /**
     * 交易类型：（1月卡续费 2余额充值 3临时缴费）
     */
    @Excel(name = "交易类型：", readConverterExp = "1=月卡续费,2=余额充值,3=临时缴费")
    private String transType;

    /**
     * 商圈优惠金额(分)
     */
    @Excel(name = "商圈优惠金额(分)")
    private Long shopCharge;

    /**
     * 月卡开始日期
     */
    @Excel(name = "月卡开始日期")
    private String beginDate;

    /**
     * 月卡结束日期
     */
    @Excel(name = "月卡结束日期")
    private String endDate;

    /**
     * 月份数
     */
    @Excel(name = "月份数")
    private Long months;

    /**
     * 外部订单号（微信、支付宝等第三方平台订单号）
     */
    @Excel(name = "外部订单号", readConverterExp = "微=信、支付宝等第三方平台订单号")
    private String outTradeNo;

    /**
     * 支付状态：1-未支付 2-已支付 3-待确认 4-已取消
     */
    @Excel(name = "支付状态：1-未支付 2-已支付 3-待确认 4-已取消")
    private String status;

    /**
     * 表记录的状态（normal-正常 delete-删除）
     */
    @Excel(name = "表记录的状态", readConverterExp = "n=ormal-正常,d=elete-删除")
    private String recordStatus;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建人
     */
    @Excel(name = "创建人")
    private Long createUser;

    /**
     * 更新人
     */
    @Excel(name = "更新人")
    private Long updateUser;

    /**
     * 缴费通道
     */
    @Excel(name = "缴费通道")
    private Long payLaneId;

    /**
     * 停车时长(秒)
     */
    @Excel(name = "停车时长(秒)")
    private Long parkLength;

    /**
     * 待支付金额，单位：分
     */
    @Excel(name = "待支付金额，单位：分")
    private Long amt;

    /**
     * 实际支付费用，单位：分
     */
    @Excel(name = "实际支付费用，单位：分")
    private Long actualFee;

    /**
     * 已支付费用
     */
    @Excel(name = "已支付费用")
    private Long paidFee;

    /**
     * 优惠减免费用
     */
    @Excel(name = "优惠减免费用")
    private Long reduceFee;

    /**
     * 总停车费用
     */
    @Excel(name = "总停车费用")
    private Long totalFee;

    /**
     * 入场时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "入场时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date inTime;

    /**
     * 结算起始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结算起始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date cutoffBeginTime;

    /**
     * 结算结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结算结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date cutoffEndTime;

    /**
     * 停车流水, 标识具体某次停车事件, 需保证该停车场下唯一.
     */
    @Excel(name = "停车流水, 标识具体某次停车事件, 需保证该停车场下唯一.")
    private String parkingSerial;

    /**
     * 岗亭编号
     */
    @Excel(name = "岗亭编号")
    private Long clientId;

    /**
     * 岗亭用户编号
     */
    @Excel(name = "岗亭用户编号")
    private Long clientUserId;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 支付渠道
     * <p>
     * icbc：工行支付
     */
    private String payChannel;

    /**
     * 手续费（分）
     */
    private BigDecimal serviceCharge;

    /**
     * 应结算金额（分）
     * <p>
     * 支付金额-手续费
     */
    private Long settlementAmount;

    /**
     * 打款状态
     * <p>
     * 1:未结算
     * 2:结算成功
     * 3:结算异常
     */
    private Integer paymentStatus;

    /**
     * 打款金额（分）
     */
    private Long paymentAmount;

    /**
     * 退款金额（分）
     */
    private Long refundAmount;

    @TableField(exist = false)
    private double sumAll;

    @TableField(exist = false)
    private int countAll;

    /**
     * "时间
     */
    @TableField(exist = false)
    private String time;

    @TableField(exist = false)
    private Long inId;
}
